/****************************************************************************
 *
 *   Copyright (c) 2020 Estimation and Control Library (ECL). All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name ECL nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ****************************************************************************/

#include <stdint.h>

static constexpr float SAMPLING_RES = 10;
static constexpr float SAMPLING_MIN_LAT = -90;
static constexpr float SAMPLING_MAX_LAT = 90;
static constexpr float SAMPLING_MIN_LON = -180;
static constexpr float SAMPLING_MAX_LON = 180;

static constexpr int LAT_DIM = 19;
static constexpr int LON_DIM = 37;


// Magnetic declination data in radians * 10^-4
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2021.1041,
static constexpr const int16_t declination_table[19][37] {
//    LONGITUDE:   -180,  -170,  -160,  -150,  -140,  -130,  -120,  -110,  -100,   -90,   -80,   -70,   -60,   -50,   -40,   -30,   -20,   -10,     0,    10,    20,    30,    40,    50,    60,    70,    80,    90,   100,   110,   120,   130,   140,   150,   160,   170,   180,
/* LAT: -90 */ {  26023, 24278, 22532, 20787, 19042, 17296, 15551, 13806, 12060, 10315,  8570,  6824,  5079,  3334,  1589,  -157, -1902, -3647, -5392, -7138, -8883,-10628,-12374,-14119,-15864,-17610,-19355,-21100,-22846,-24591,-26336,-28082,-29827, 31259, 29514, 27768, 26023, },
/* LAT: -80 */ {  22593, 20457, 18513, 16735, 15093, 13553, 12088, 10675,  9299,  7948,  6616,  5297,  3987,  2682,  1375,    57, -1282, -2652, -4059, -5508, -6999, -8533,-10107,-11723,-13385,-15101,-16884,-18753,-20733,-22849,-25120,-27554,-30123, 30066, 27443, 24930, 22593, },
/* LAT: -70 */ {  14965, 13569, 12448, 11490, 10626,  9799,  8960,  8075,  7125,  6106,  5036,  3942,  2855,  1797,   773,  -238, -1273, -2373, -3568, -4861, -6234, -7659, -9102,-10541,-11965,-13379,-14805,-16286,-17901,-19802,-22299,-26063, 30852, 24205, 19629, 16838, 14965, },
/* LAT: -60 */ {   8371,  8136,  7865,  7600,  7354,  7108,  6806,  6379,  5769,  4953,  3955,  2844,  1720,   685,  -205,  -970, -1700, -2516, -3507, -4690, -6009, -7370, -8687, -9897,-10964,-11866,-12584,-13081,-13252,-12803,-10718, -3624,  4747,  7552,  8352,  8495,  8371, },
/* LAT: -50 */ {   5447,  5488,  5439,  5357,  5290,  5259,  5230,  5108,  4771,  4115,  3112,  1843,   499,  -693, -1582, -2163, -2569, -3004, -3670, -4658, -5881, -7147, -8287, -9194, -9803,-10055, -9875, -9132, -7635, -5284, -2386,   360,  2468,  3891,  4765,  5240,  5447, },
/* LAT: -40 */ {   3927,  4022,  4035,  3997,  3944,  3915,  3924,  3918,  3750,  3225,  2214,   780,  -787, -2117, -3002, -3475, -3675, -3743, -3898, -4429, -5371, -6434, -7324, -7877, -8004, -7648, -6777, -5401, -3685, -1974,  -508,   715,  1756,  2616,  3268,  3696,  3927, },
/* LAT: -30 */ {   2960,  3048,  3084,  3078,  3026,  2953,  2898,  2867,  2744,  2276,  1257,  -249, -1860, -3131, -3895, -4260, -4359, -4172, -3742, -3484, -3798, -4526, -5233, -5603, -5500, -4934, -3986, -2777, -1555,  -599,    86,   688,  1307,  1903,  2406,  2763,  2960, },
/* LAT: -20 */ {   2318,  2365,  2390,  2402,  2367,  2279,  2177,  2103,  1960,  1474,   437, -1039, -2523, -3605, -4164, -4304, -4122, -3586, -2734, -1913, -1595, -1921, -2568, -3052, -3107, -2764, -2135, -1314,  -526,   -25,   245,   549,   985,  1454,  1868,  2169,  2318, },
/* LAT: -10 */ {   1924,  1920,  1906,  1913,  1893,  1816,  1713,  1627,  1445,   902,  -144, -1513, -2795, -3648, -3946, -3744, -3186, -2413, -1566,  -799,  -313,  -321,  -777, -1288, -1514, -1435, -1125,  -623,  -116,   135,   193,   356,   721,  1147,  1530,  1809,  1924, },
/* LAT:   0 */ {   1711,  1680,  1632,  1632,  1629,  1568,  1473,  1366,  1115,   500,  -531, -1756, -2823, -3435, -3463, -2986, -2227, -1443,  -783,  -241,   181,   309,    44,  -372,  -635,  -696,  -597,  -332,   -35,    63,    11,   103,   438,   868,  1277,  1588,  1711, },
/* LAT:  10 */ {   1580,  1589,  1554,  1577,  1610,  1569,  1458,  1279,   906,   191,  -826, -1906, -2748, -3112, -2933, -2342, -1569,  -852,  -328,    58,   387,   546,   396,    75,  -165,  -273,  -293,  -207,   -98,  -132,  -263,  -234,    62,   504,   975,  1374,  1580, },
/* LAT:  20 */ {   1404,  1554,  1619,  1717,  1808,  1795,  1649,  1355,   813,   -43, -1088, -2048, -2663, -2793, -2483, -1891, -1181,  -526,   -58,   257,   519,   671,   589,   347,   144,    27,   -58,  -115,  -189,  -373,  -605,  -662,  -434,     4,   537,  1050,  1404, },
/* LAT:  30 */ {   1115,  1483,  1745,  1971,  2134,  2149,  1968,  1552,   827,  -204, -1329, -2221, -2655, -2609, -2221, -1646,  -992,  -370,   100,   411,   646,   798,   785,   638,   487,   363,   214,    13,  -262,  -632,  -999, -1160, -1006,  -587,   -14,   594,  1115, },
/* LAT:  40 */ {    772,  1360,  1853,  2245,  2495,  2540,  2328,  1798,   887,  -346, -1599, -2484, -2822, -2681, -2240, -1651,  -997,  -365,   151,   522,   797,  1001,  1102,  1095,  1019,   873,   614,   216,  -313,  -916, -1439, -1688, -1578, -1165,  -567,   109,   772, },
/* LAT:  50 */ {    498,  1248,  1927,  2481,  2845,  2950,  2720,  2065,   918,  -594, -2037, -2971, -3278, -3092, -2604, -1959, -1248,  -547,    75,   586,  1010,  1371,  1658,  1834,  1858,  1677,  1245,   553,  -329, -1231, -1917, -2213, -2095, -1654, -1013,  -273,   498, },
/* LAT:  60 */ {    326,  1183,  1988,  2679,  3177,  3383,  3161,  2338,   801, -1190, -2935, -3929, -4185, -3924, -3348, -2600, -1770,  -924,  -111,   646,  1343,  1979,  2528,  2932,  3102,  2929,  2311,  1217,  -185, -1509, -2392, -2713, -2551, -2052, -1348,  -534,   326, },
/* LAT:  70 */ {    135,  1078,  1978,  2775,  3384,  3667,  3394,  2215,  -105, -2897, -4871, -5685, -5676, -5176, -4394, -3449, -2416, -1342,  -261,   805,  1835,  2806,  3680,  4395,  4854,  4904,  4324,  2890,   727, -1381, -2695, -3149, -2989, -2450, -1687,  -804,   135, },
/* LAT:  80 */ {   -423,   505,  1364,  2060,  2441,  2225,   910, -1965, -5405, -7534, -8213, -8017, -7340, -6389, -5272, -4055, -2774, -1458,  -124,  1210,  2529,  3815,  5044,  6184,  7181,  7942,  8292,  7876,  6051,  2478, -1024, -2768, -3170, -2864, -2197, -1349,  -423, },
/* LAT:  90 */ { -30377,-28632,-26887,-25141,-23396,-21650,-19905,-18160,-16414,-14669,-12924,-11179, -9433, -7688, -5943, -4198, -2453,  -707,  1038,  2783,  4528,  6273,  8019,  9764, 11509, 13255, 15000, 16745, 18491, 20236, 21982, 23727, 25473, 27218, 28963, 30709,-30377, },
};

// Magnetic inclination data in radians * 10^-4
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2021.1041,
static constexpr const int16_t inclination_table[19][37] {
//    LONGITUDE:   -180,  -170,  -160,  -150,  -140,  -130,  -120,  -110,  -100,   -90,   -80,   -70,   -60,   -50,   -40,   -30,   -20,   -10,     0,    10,    20,    30,    40,    50,    60,    70,    80,    90,   100,   110,   120,   130,   140,   150,   160,   170,   180,
/* LAT: -90 */ { -12581,-12581,-12581,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12580,-12581,-12581,-12581,-12581,-12581,-12581,-12581, },
/* LAT: -80 */ { -13668,-13534,-13374,-13193,-12999,-12797,-12593,-12392,-12200,-12023,-11866,-11731,-11621,-11534,-11471,-11430,-11410,-11413,-11440,-11494,-11578,-11692,-11836,-12009,-12206,-12423,-12652,-12885,-13113,-13326,-13513,-13664,-13769,-13821,-13819,-13766,-13668, },
/* LAT: -70 */ { -14118,-13800,-13480,-13157,-12825,-12480,-12124,-11765,-11420,-11110,-10855,-10670,-10556,-10503,-10490,-10495,-10505,-10516,-10541,-10598,-10705,-10878,-11122,-11434,-11804,-12220,-12667,-13131,-13597,-14050,-14469,-14817,-15011,-14961,-14731,-14434,-14118, },
/* LAT: -60 */ { -13526,-13174,-12836,-12504,-12160,-11788,-11372,-10916,-10447,-10013, -9679, -9498, -9491, -9625, -9830,-10028,-10160,-10211,-10205,-10192,-10238,-10392,-10675,-11078,-11572,-12125,-12710,-13306,-13894,-14455,-14952,-15243,-15075,-14694,-14289,-13898,-13526, },
/* LAT: -50 */ { -12499,-12159,-11829,-11508,-11185,-10838,-10438, -9966, -9434, -8909, -8512, -8377, -8568, -9023, -9588,-10107,-10479,-10655,-10639,-10495,-10353,-10350,-10560,-10966,-11501,-12091,-12678,-13219,-13668,-13968,-14077,-14006,-13803,-13520,-13193,-12847,-12499, },
/* LAT: -40 */ { -11240,-10895,-10550,-10206, -9867, -9528, -9166, -8738, -8215, -7646, -7211, -7153, -7596, -8411, -9334,-10171,-10841,-11291,-11452,-11303,-10968,-10689,-10666,-10933,-11388,-11892,-12341,-12670,-12833,-12840,-12749,-12610,-12429,-12197,-11911,-11584,-11240, },
/* LAT: -30 */ {  -9601, -9228, -8854, -8465, -8072, -7695, -7336, -6941, -6426, -5812, -5348, -5406, -6150, -7340, -8593, -9698,-10623,-11348,-11770,-11785,-11430,-10923,-10577,-10562,-10805,-11126,-11388,-11509,-11451,-11275,-11098,-10958,-10808,-10599,-10318, -9974, -9601, },
/* LAT: -20 */ {  -7369, -6939, -6529, -6104, -5659, -5227, -4832, -4412, -3842, -3153, -2690, -2918, -3994, -5590, -7223, -8608, -9691,-10485,-10946,-11003,-10659,-10054, -9490, -9234, -9274, -9435, -9581, -9605, -9437, -9163, -8964, -8869, -8757, -8545, -8228, -7819, -7369, },
/* LAT: -10 */ {  -4411, -3890, -3447, -3015, -2558, -2106, -1686, -1222,  -587,   125,   506,   114, -1178, -3077, -5058, -6691, -7815, -8471, -8755, -8710, -8319, -7647, -6983, -6627, -6581, -6674, -6794, -6823, -6638, -6340, -6178, -6174, -6121, -5898, -5515, -4992, -4411, },
/* LAT:   0 */ {   -901,  -295,   158,   554,   971,  1389,  1785,  2241,  2838,  3427,  3648,  3183,  1920,    31, -2017, -3695, -4736, -5189, -5264, -5106, -4682, -3980, -3275, -2895, -2832, -2904, -3032, -3108, -2980, -2742, -2678, -2803, -2849, -2654, -2230, -1608,  -901, },
/* LAT:  10 */ {   2567,  3177,  3600,  3935,  4289,  4657,  5014,  5413,  5878,  6260,  6311,  5845,  4787,  3239,  1547,   150,  -683,  -954,  -876,  -650,  -250,   376,  1009,  1352,  1413,  1363,  1260,  1168,  1212,  1319,  1253,  1004,   830,   910,  1262,  1856,  2567, },
/* LAT:  20 */ {   5419,  5936,  6308,  6600,  6912,  7256,  7604,  7961,  8305,  8515,  8439,  7992,  7171,  6085,  4957,  4035,  3487,  3351,  3489,  3726,  4050,  4507,  4966,  5224,  5278,  5254,  5202,  5146,  5138,  5124,  4959,  4640,  4354,  4271,  4442,  4859,  5419, },
/* LAT:  30 */ {   7570,  7937,  8251,  8532,  8840,  9189,  9550,  9898, 10182, 10304, 10168,  9755,  9134,  8424,  7760,  7241,  6939,  6886,  7020,  7226,  7468,  7763,  8050,  8224,  8279,  8287,  8286,  8277,  8258,  8180,  7965,  7620,  7272,  7056,  7039,  7231,  7570, },
/* LAT:  40 */ {   9265,  9485,  9740, 10025, 10352, 10715, 11086, 11430, 11687, 11775, 11632, 11276, 10804, 10329,  9930,  9642,  9486,  9475,  9580,  9737,  9909, 10090, 10261, 10385, 10462, 10519, 10571, 10604, 10590, 10485, 10248,  9903,  9539,  9256,  9113,  9124,  9265, },
/* LAT:  50 */ {  10801, 10923, 11125, 11396, 11721, 12077, 12434, 12754, 12980, 13043, 12906, 12609, 12243, 11895, 11617, 11427, 11330, 11322, 11384, 11483, 11594, 11708, 11823, 11938, 12055, 12175, 12287, 12360, 12354, 12234, 11992, 11667, 11328, 11044, 10854, 10774, 10801, },
/* LAT:  60 */ {  12318, 12393, 12546, 12766, 13039, 13342, 13646, 13915, 14092, 14121, 13984, 13734, 13443, 13170, 12947, 12788, 12694, 12660, 12673, 12718, 12784, 12867, 12972, 13102, 13260, 13434, 13598, 13709, 13719, 13604, 13382, 13103, 12824, 12586, 12416, 12325, 12318, },
/* LAT:  70 */ {  13759, 13804, 13902, 14047, 14230, 14436, 14646, 14829, 14933, 14910, 14769, 14564, 14345, 14139, 13964, 13828, 13733, 13677, 13656, 13667, 13708, 13778, 13880, 14015, 14180, 14366, 14551, 14693, 14743, 14674, 14515, 14316, 14121, 13956, 13836, 13770, 13759, },
/* LAT:  80 */ {  15003, 15018, 15058, 15120, 15199, 15286, 15367, 15412, 15389, 15304, 15187, 15060, 14936, 14821, 14720, 14638, 14575, 14534, 14515, 14518, 14544, 14592, 14663, 14755, 14866, 14991, 15126, 15257, 15364, 15410, 15376, 15293, 15199, 15117, 15054, 15015, 15003, },
/* LAT:  90 */ {  15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, 15390, },
};

// Magnetic strength data in milli-Gauss * 10
// Model: WMM-2020,
// Version: 0.5.1.11,
// Date: 2021.1041,
static constexpr const int16_t strength_table[19][37] {
//    LONGITUDE:  -180, -170, -160, -150, -140, -130, -120, -110, -100,  -90,  -80,  -70,  -60,  -50,  -40,  -30,  -20,  -10,    0,   10,   20,   30,   40,   50,   60,   70,   80,   90,  100,  110,  120,  130,  140,  150,  160,  170,  180,
/* LAT: -90 */ {  5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, },
/* LAT: -80 */ {  6066, 6003, 5925, 5834, 5732, 5621, 5503, 5381, 5259, 5139, 5025, 4919, 4825, 4745, 4681, 4636, 4611, 4608, 4629, 4675, 4744, 4837, 4951, 5082, 5226, 5375, 5525, 5668, 5799, 5913, 6006, 6075, 6120, 6140, 6137, 6111, 6066, },
/* LAT: -70 */ {  6311, 6179, 6030, 5867, 5689, 5498, 5293, 5078, 4859, 4643, 4440, 4257, 4098, 3967, 3862, 3785, 3737, 3724, 3751, 3826, 3952, 4131, 4358, 4624, 4918, 5225, 5528, 5812, 6062, 6267, 6419, 6515, 6558, 6551, 6503, 6421, 6311, },
/* LAT: -60 */ {  6195, 6005, 5805, 5598, 5380, 5146, 4890, 4612, 4320, 4029, 3761, 3533, 3352, 3216, 3117, 3043, 2993, 2972, 2997, 3085, 3251, 3500, 3824, 4208, 4629, 5062, 5484, 5868, 6194, 6444, 6608, 6689, 6692, 6630, 6518, 6369, 6195, },
/* LAT: -50 */ {  5851, 5622, 5392, 5163, 4932, 4688, 4418, 4115, 3786, 3454, 3151, 2909, 2745, 2653, 2604, 2571, 2538, 2513, 2518, 2588, 2757, 3042, 3434, 3902, 4407, 4913, 5389, 5809, 6150, 6393, 6532, 6575, 6534, 6425, 6265, 6069, 5851, },
/* LAT: -40 */ {  5398, 5154, 4911, 4672, 4439, 4203, 3949, 3665, 3351, 3025, 2725, 2500, 2381, 2353, 2373, 2396, 2403, 2393, 2382, 2409, 2533, 2801, 3212, 3722, 4267, 4793, 5262, 5653, 5947, 6136, 6225, 6229, 6161, 6032, 5852, 5635, 5398, },
/* LAT: -30 */ {  4881, 4642, 4405, 4172, 3947, 3728, 3510, 3279, 3024, 2749, 2490, 2306, 2232, 2255, 2322, 2394, 2462, 2515, 2540, 2553, 2616, 2806, 3159, 3641, 4171, 4670, 5093, 5413, 5618, 5719, 5747, 5720, 5642, 5510, 5332, 5117, 4881, },
/* LAT: -20 */ {  4323, 4112, 3905, 3702, 3506, 3323, 3155, 2993, 2816, 2619, 2428, 2292, 2247, 2287, 2375, 2485, 2614, 2745, 2839, 2878, 2901, 2990, 3221, 3598, 4045, 4473, 4826, 5066, 5174, 5183, 5153, 5106, 5023, 4896, 4730, 4534, 4323, },
/* LAT: -10 */ {  3791, 3632, 3481, 3335, 3200, 3080, 2977, 2887, 2791, 2678, 2557, 2456, 2406, 2425, 2508, 2636, 2792, 2953, 3081, 3147, 3162, 3186, 3302, 3548, 3870, 4192, 4460, 4627, 4665, 4614, 4546, 4482, 4393, 4268, 4120, 3957, 3791, },
/* LAT:   0 */ {  3412, 3321, 3238, 3166, 3112, 3074, 3049, 3032, 3010, 2964, 2886, 2790, 2707, 2671, 2707, 2807, 2940, 3076, 3194, 3271, 3304, 3325, 3396, 3548, 3754, 3967, 4148, 4257, 4266, 4199, 4112, 4019, 3906, 3775, 3642, 3519, 3412, },
/* LAT:  10 */ {  3283, 3253, 3234, 3232, 3257, 3305, 3362, 3418, 3456, 3448, 3379, 3264, 3136, 3036, 3005, 3042, 3122, 3220, 3321, 3407, 3471, 3532, 3618, 3734, 3867, 4004, 4123, 4195, 4200, 4140, 4031, 3888, 3727, 3568, 3433, 3338, 3283, },
/* LAT:  20 */ {  3400, 3405, 3433, 3488, 3582, 3704, 3835, 3954, 4037, 4051, 3978, 3836, 3666, 3523, 3442, 3426, 3459, 3530, 3625, 3722, 3812, 3909, 4019, 4129, 4236, 4346, 4447, 4514, 4527, 4470, 4335, 4134, 3908, 3699, 3537, 3437, 3400, },
/* LAT:  30 */ {  3723, 3733, 3790, 3892, 4036, 4209, 4387, 4544, 4654, 4681, 4609, 4452, 4260, 4092, 3982, 3933, 3934, 3982, 4067, 4163, 4260, 4364, 4480, 4597, 4716, 4841, 4960, 5046, 5075, 5020, 4866, 4628, 4355, 4101, 3902, 3776, 3723, },
/* LAT:  40 */ {  4223, 4224, 4293, 4419, 4588, 4777, 4962, 5119, 5224, 5250, 5182, 5031, 4841, 4664, 4532, 4454, 4425, 4444, 4502, 4580, 4665, 4761, 4875, 5008, 5159, 5319, 5469, 5580, 5622, 5571, 5417, 5180, 4907, 4647, 4437, 4293, 4223, },
/* LAT:  50 */ {  4831, 4828, 4888, 5002, 5150, 5311, 5461, 5582, 5655, 5663, 5598, 5469, 5304, 5138, 4998, 4898, 4841, 4827, 4849, 4898, 4966, 5056, 5174, 5323, 5498, 5682, 5849, 5969, 6016, 5974, 5845, 5649, 5423, 5206, 5026, 4899, 4831, },
/* LAT:  60 */ {  5392, 5384, 5416, 5482, 5570, 5665, 5751, 5816, 5848, 5837, 5781, 5685, 5563, 5433, 5312, 5214, 5146, 5110, 5107, 5134, 5189, 5274, 5391, 5538, 5704, 5873, 6022, 6128, 6174, 6153, 6071, 5944, 5797, 5653, 5530, 5441, 5392, },
/* LAT:  70 */ {  5726, 5709, 5709, 5723, 5747, 5774, 5797, 5810, 5808, 5787, 5746, 5687, 5615, 5538, 5463, 5398, 5349, 5320, 5314, 5333, 5378, 5446, 5538, 5646, 5763, 5878, 5978, 6053, 6093, 6097, 6068, 6014, 5947, 5876, 5812, 5761, 5726, },
/* LAT:  80 */ {  5789, 5772, 5759, 5748, 5738, 5729, 5719, 5707, 5691, 5672, 5649, 5623, 5595, 5567, 5541, 5520, 5506, 5500, 5504, 5519, 5545, 5580, 5622, 5670, 5720, 5768, 5811, 5846, 5871, 5884, 5887, 5880, 5866, 5848, 5828, 5807, 5789, },
/* LAT:  90 */ {  5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, },
};
